import request from '@/utils/request'

/**
 * 社区模块API
 */
export default {
  /**
   * 帖子相关接口
   */
  posts: {
    /**
     * 获取帖子列表
     * @param {Object} params 查询参数
     * @param {number} [params.userId] 用户ID，不传则获取全部帖子
     * @param {number} [params.pageNum=1] 页码，不能小于1
     * @param {number} [params.pageSize=10] 每页条数，不能小于1
     * @returns {Promise<Page<CommunityPostDetailDTO>>} 分页帖子列表
     */
    list: (params = {}) => request.get('/api/v1/community/posts', { 
      params: {
        userId: params.userId,
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10
      }
    }),
    
    /**
     * 获取我的帖子列表
     * @param {Object} params 查询参数
     * @param {number} [params.pageNum=1] 页码，不能小于1
     * @param {number} [params.pageSize=10] 每页条数，不能小于1
     * @returns {Promise<Page<CommunityPostDetailDTO>>} 分页帖子列表
     */
    my: (params = {}) => request.get('/api/v1/community/posts/my', {
      params: {
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10
      }
    }),
    /**
     * 获取帖子详情
     * @param {number} id 帖子ID
     * @returns {Promise} 帖子详情
     */
    detail: (id) => request.get(`/api/v1/community/posts/${id}`),
    
    /**
     * 发布帖子
     * @param {Object} postDTO 帖子数据
     * @param {string} postDTO.title 标题
     * @param {string} postDTO.content 内容
     * @param {Array<string>} postDTO.images 图片URL列表
     * @param {number} postDTO.status 状态：0-草稿，1-已发布
     * @returns {Promise<number>} 帖子ID
     */
    create: (postDTO) => request.post('/api/v1/community/posts', postDTO),
    
    /**
     * 更新帖子
     * @param {number} id 帖子ID
     * @param {Object} postDTO 帖子数据
     * @returns {Promise<boolean>} 是否成功
     */
    update: (id, postDTO) => request.put(`/api/v1/community/posts/${id}`, postDTO),
    
    /**
     * 删除帖子
     * @param {number} id 帖子ID
     * @returns {Promise<boolean>} 是否成功
     */
    delete: (id) => request.delete(`/api/v1/community/posts/${id}`),
    
    /**
     * 点赞帖子
     * @param {number} id 帖子ID
     * @returns {Promise<boolean>} 是否成功
     */
    like: (id) => request.post(`/api/v1/community/posts/${id}/like`),
    
    /**
     * 取消点赞
     * @param {number} id 帖子ID
     * @returns {Promise<boolean>} 是否成功
     */
    unlike: (id) => request.delete(`/api/v1/community/posts/${id}/like`),
    
    /**
     * 收藏帖子
     * @param {number} id 帖子ID
     * @returns {Promise<boolean>} 是否成功
     */
    favorite: (id) => request.post(`/api/v1/community/posts/${id}/favorite`),
    
    /**
     * 取消收藏
     * @param {number} id 帖子ID
     * @returns {Promise<boolean>} 是否成功
     */
    unfavorite: (id) => request.delete(`/api/v1/community/posts/${id}/favorite`),

    /**
     * 获取收藏的帖子列表
     * @param {Object} params 查询参数
     * @param {number} params.pageNum 页码
     * @param {number} params.pageSize 每页条数
     * @returns {Promise} 帖子列表
     */
    getFavorites: (params = {}) => request.get('/api/v1/community/posts/favorites', {
      params: {
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10
      }
    }),

    /**
     * 上传帖子图片
     * @param {string} filePath 图片临时路径
     * @returns {Promise<string>} 图片URL
     */
    uploadImage: (filePath) => request.upload('/api/v1/community/posts/upload/image', {
      filePath,
      name: 'file'
    }),
  },

  /**
   * 标签相关接口
   */
  tags: {
    /**
     * 获取所有可用标签
     * @returns {Promise<Array>} 标签列表
     */
    list: () => request.get('/api/v1/community/posts/tags'),

    /**
     * 获取热门标签
     * @param {number} limit 获取数量
     * @returns {Promise<Array>} 标签列表
     */
    hot: (limit = 10) => request.get('/api/v1/community/posts/tags/hot', {
      params: { limit }
    }),

    /**
     * 获取指定标签的帖子列表
     * @param {number} tagId 标签ID
     * @param {Object} params 查询参数
     * @param {number} params.pageNum 页码
     * @param {number} params.pageSize 每页条数
     * @returns {Promise} 帖子列表
     */
    getPosts: (tagId, params = {}) => request.get(`/api/v1/community/posts/tags/${tagId}`, {
      params: {
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10
      }
    })
  },

  // 评论相关接口
  comment: {
    // 获取评论列表
    list: (postId, params = {}) => request.get('/api/v1/community/comment/list', { 
      params: {
        postId,
        current: params.page || 1,
        size: params.pageSize || 10
      }
    }),
    
    // 获取评论回复列表
    getReplies: (commentId) => request.get(`/api/v1/community/comment/${commentId}/replies`),
    
    // 发表评论
    create: (postId, content, parentId = null) => request.post('/api/v1/community/comment/create', null, {
      params: {
        postId,
        content,
        parentId: parentId || undefined
      }
    }),
    
    // 删除评论
    delete: (commentId) => request.delete(`/api/v1/community/comment/${commentId}`),
    
    // 点赞/取消点赞评论
    like: (commentId) => request.post(`/api/v1/community/comment/${commentId}/like`)
  },
 

  // 分类相关接口
  category: {
    // 创建分类
    create: (data) => request.post('/community/category', {
      name: data.name,
      description: data.description,
      icon: data.icon,
      sort: data.sort || 0
    }),

    // 更新分类
    update: (id, data) => request.put(`/community/category/${id}`, {
      name: data.name,
      description: data.description,
      icon: data.icon,
      sort: data.sort,
      status: data.status
    }),

    // 获取分类列表
    list: (params = {}) => request.get('/community/category', {
      params: {
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10
      }
    })
  },

  // 关注相关接口 [需要登录]
  follow: {
    /**
     * 获取关注列表
     * @param {Object} params - 请求参数
     * @param {number} params.pageNum - 页码
     * @param {number} params.pageSize - 每页数量
     * @returns {Promise} 返回关注列表数据
     */
    getFollowingList(params) {
      return request.get('/community/follow/following', { params })
    },

    /**
     * 获取粉丝列表
     * @param {Object} params - 请求参数
     * @param {number} params.pageNum - 页码
     * @param {number} params.pageSize - 每页数量
     * @returns {Promise} 返回粉丝列表数据
     */
    getFollowerList(params) {
      return request.get('/community/follow/followers', { params })
    },

    /**
     * 检查是否已关注用户
     * @param {number} userId - 要检查的用户ID
     * @returns {Promise<boolean>} 返回是否已关注
     */
    checkIsFollowed(userId) {
      return request.get(`/community/follow/check/${userId}`)
    },

    /**
     * 关注用户
     * @param {number} userId - 要关注的用户ID
     * @returns {Promise} 返回关注结果
     */
    followUser(userId) {
      return request.post(`/community/follow/${userId}`)
    },

    /**
     * 取消关注用户
     * @param {number} userId - 要取消关注的用户ID
     * @returns {Promise} 返回取消关注结果
     */
    unfollowUser(userId) {
      return request.delete(`/community/follow/${userId}`)
    }
  },

  // 搜索相关接口 [需要登录]
  search: {
    // 记录搜索历史
    recordSearch: (keyword, categoryId) => request.post('/community/search/record', null, {
      params: {
        keyword,
        categoryId
      }
    }),

    // 获取用户最近搜索历史
    getRecentSearches: (limit = 10) => request.get('/community/search/recent', {
      params: { limit }
    }),

    // 获取热门搜索词
    getHotKeywords: (limit = 10) => request.get('/community/search/hot', {
      params: { limit }
    }),

    // 清空用户搜索历史
    clearSearchHistory: () => request.delete('/community/search/clear'),

    /**
     * 搜索帖子
     * @param {Object} params 搜索参数
     * @param {string} params.keyword 搜索关键词
     * @param {number} [params.pageNum=1] 页码，不能小于1
     * @param {number} [params.pageSize=10] 每页条数，不能小于1
     * @returns {Promise<Page<CommunityPostDetailDTO>>} 分页帖子列表
     */
    searchPosts: (params = {}) => request.get('/community/search/post', {
      params: {
        keyword: params.keyword,
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10
      }
    })
  }
} 